<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="pj3cB" id="pj3cB"><span data-lake-id="ub9cc50a6" id="ub9cc50a6">典型回答</span></h1>
  <p data-lake-id="u24c6ac75" id="u24c6ac75"><br></p>
  <p data-lake-id="u35830b53" id="u35830b53"><span data-lake-id="uceb559c8" id="uceb559c8">使用两个队列可以实现一个栈，一个队列用来存储栈中的元素，另一个队列用来在pop操作时暂存元素。</span></p>
  <p data-lake-id="u8d20b693" id="u8d20b693"><span data-lake-id="u430e98cf" id="u430e98cf">​</span><br></p>
  <pre lang="java"><code>
import java.util.LinkedList;
import java.util.Queue;

public class MyStack&lt;T&gt; {
    private Queue&lt;T&gt; queue;
    private Queue&lt;T&gt; tempQueue;

    public MyStack() {
        queue = new LinkedList&lt;&gt;();
        tempQueue = new LinkedList&lt;&gt;();
    }

    public void push(T element) {
        queue.offer(element);
    }

    public T pop() {
        if (isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        while (queue.size() &gt; 1) {
            tempQueue.offer(queue.poll());
        }
        T element = queue.poll();
        Queue&lt;T&gt; temp = queue;
        queue = tempQueue;
        tempQueue = temp;
        return element;
    }

    public T peek() {
        if (isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        while (queue.size() &gt; 1) {
            tempQueue.offer(queue.poll());
        }
        T element = queue.poll();
        tempQueue.offer(element);
        Queue&lt;T&gt; temp = queue;
        queue = tempQueue;
        tempQueue = temp;
        return element;
    }

    public boolean isEmpty() {
        return queue.isEmpty();
    }
}

</code></pre>
  <p data-lake-id="u7fefabd5" id="u7fefabd5"><br></p>
  <p data-lake-id="u5560b23b" id="u5560b23b"><span data-lake-id="u0f77c5ae" id="u0f77c5ae">其中，push方法用来入栈，直接将元素加入queue队列中。</span></p>
  <p data-lake-id="ue89d62c7" id="ue89d62c7"><span data-lake-id="u45debdc2" id="u45debdc2">​</span><br></p>
  <p data-lake-id="ua29ff0eb" id="ua29ff0eb"><span data-lake-id="uf988d8e5" id="uf988d8e5">pop方法用来出栈，先将queue队列中的元素倒入tempQueue队列中，直到queue队列中只有一个元素，将其弹出即可。</span></p>
  <p data-lake-id="u17558691" id="u17558691"><span data-lake-id="u155b4c08" id="u155b4c08">​</span><br></p>
  <p data-lake-id="u0104f1a6" id="u0104f1a6"><span data-lake-id="u1483dd4d" id="u1483dd4d">peek方法用来获取栈顶元素，与pop方法类似，只是在弹出元素之前需要先将其加入tempQueue队列中。</span></p>
  <p data-lake-id="u61fa3450" id="u61fa3450"><span data-lake-id="u5800f7bb" id="u5800f7bb">​</span><br></p>
  <p data-lake-id="u9f879dae" id="u9f879dae"><span data-lake-id="u3162b82b" id="u3162b82b">isEmpty方法用来判断栈是否为空，如果queue队列为空，则栈为空。</span></p>
  <p data-lake-id="u0eda042e" id="u0eda042e"><span data-lake-id="ud9c384ad" id="ud9c384ad">​</span><br></p>
  <p data-lake-id="u1857d331" id="u1857d331"><span data-lake-id="uea265a70" id="uea265a70">这个实现的时间复杂度为O(n)，空间复杂度为O(n)，其中n为栈中元素的个数。</span></p>
 </body>
</html>